<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/special_insns.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/special_insns.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfU1BFQ0lBTF9JTlNOU19IXzA_"><span class="b">_ASM_X86_SPECIAL_INSNS_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfU1BFQ0lBTF9JTlNOU19IXzA_"><span class="b">_ASM_X86_SPECIAL_INSNS_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> 
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_X19LRVJORUxfX18w"><span class="b">__KERNEL__</span></a>
<a name="6" /><span class="True">       6:</span> 
<a name="7" /><span class="True">       7:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_clts</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="8" /><span class="True">       8:</span> <span class="f">{</span>
<a name="9" /><span class="True">       9:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;clts&quot;</span><span class="f">)</span><span class="f">;</span>
<a name="10" /><span class="True">      10:</span> <span class="f">}</span>
<a name="11" /><span class="True">      11:</span> 
<a name="12" /><span class="True">      12:</span> <span class="k">/*</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> * Volatile isn&apos;t enough to prevent the compiler from reordering the</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> * read/write functions for the control registers and messing everything up.</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> * A memory clobber would solve the problem, but would prevent reordering of</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> * all loads stores around it, which can hurt performance. Solution is to</span>
<a name="17" /><span class="True">      17:</span> <span class="k"> * use a variable and mimic reads and writes to it to enforce serialization</span>
<a name="18" /><span class="True">      18:</span> <span class="k"> */</span>
<a name="19" /><span class="True">      19:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">__force_order</span><span class="f">;</span>
<a name="20" /><span class="True">      20:</span> 
<a name="21" /><span class="True">      21:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">native_read_cr0</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="22" /><span class="True">      22:</span> <span class="f">{</span>
<a name="23" /><span class="True">      23:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">;</span>
<a name="24" /><span class="True">      24:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov %%cr0,%0\n\t&quot;</span> <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;=m&quot;</span> <span class="f">(</span><span class="b">__force_order</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="25" /><span class="True">      25:</span>     <span class="m">return</span> <span class="b">val</span><span class="f">;</span>
<a name="26" /><span class="True">      26:</span> <span class="f">}</span>
<a name="27" /><span class="True">      27:</span> 
<a name="28" /><span class="True">      28:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_write_cr0</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">)</span>
<a name="29" /><span class="True">      29:</span> <span class="f">{</span>
<a name="30" /><span class="True">      30:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov %0,%%cr0&quot;</span><span class="f">:</span> <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span> <span class="f">(</span><span class="b">__force_order</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span> <span class="f">}</span>
<a name="32" /><span class="True">      32:</span> 
<a name="33" /><span class="True">      33:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">native_read_cr2</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="34" /><span class="True">      34:</span> <span class="f">{</span>
<a name="35" /><span class="True">      35:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">;</span>
<a name="36" /><span class="True">      36:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov %%cr2,%0\n\t&quot;</span> <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;=m&quot;</span> <span class="f">(</span><span class="b">__force_order</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="37" /><span class="True">      37:</span>     <span class="m">return</span> <span class="b">val</span><span class="f">;</span>
<a name="38" /><span class="True">      38:</span> <span class="f">}</span>
<a name="39" /><span class="True">      39:</span> 
<a name="40" /><span class="True">      40:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_write_cr2</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">)</span>
<a name="41" /><span class="True">      41:</span> <span class="f">{</span>
<a name="42" /><span class="True">      42:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov %0,%%cr2&quot;</span><span class="f">:</span> <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span> <span class="f">(</span><span class="b">__force_order</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="43" /><span class="True">      43:</span> <span class="f">}</span>
<a name="44" /><span class="True">      44:</span> 
<a name="45" /><span class="True">      45:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">native_read_cr3</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="46" /><span class="True">      46:</span> <span class="f">{</span>
<a name="47" /><span class="True">      47:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">;</span>
<a name="48" /><span class="True">      48:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov %%cr3,%0\n\t&quot;</span> <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;=m&quot;</span> <span class="f">(</span><span class="b">__force_order</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="49" /><span class="True">      49:</span>     <span class="m">return</span> <span class="b">val</span><span class="f">;</span>
<a name="50" /><span class="True">      50:</span> <span class="f">}</span>
<a name="51" /><span class="True">      51:</span> 
<a name="52" /><span class="True">      52:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_write_cr3</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">)</span>
<a name="53" /><span class="True">      53:</span> <span class="f">{</span>
<a name="54" /><span class="True">      54:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov %0,%%cr3&quot;</span><span class="f">:</span> <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span> <span class="f">(</span><span class="b">__force_order</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="55" /><span class="True">      55:</span> <span class="f">}</span>
<a name="56" /><span class="True">      56:</span> 
<a name="57" /><span class="True">      57:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">native_read_cr4</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="58" /><span class="True">      58:</span> <span class="f">{</span>
<a name="59" /><span class="True">      59:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">;</span>
<a name="60" /><span class="True">      60:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov %%cr4,%0\n\t&quot;</span> <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;=m&quot;</span> <span class="f">(</span><span class="b">__force_order</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="61" /><span class="True">      61:</span>     <span class="m">return</span> <span class="b">val</span><span class="f">;</span>
<a name="62" /><span class="True">      62:</span> <span class="f">}</span>
<a name="63" /><span class="True">      63:</span> 
<a name="64" /><span class="True">      64:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">native_read_cr4_safe</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="65" /><span class="True">      65:</span> <span class="f">{</span>
<a name="66" /><span class="True">      66:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">;</span>
<a name="67" /><span class="True">      67:</span>     <span class="k">/* This could fault if %cr4 does not exist. In x86_64, a cr4 always</span>
<a name="68" /><span class="True">      68:</span> <span class="k">     * exists, so it will never fail. */</span>
<a name="69" /><span class="False">      69:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="70" /><span class="False">      70:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;1: mov %%cr4, %0\n&quot;</span>
<a name="71" /><span class="False">      71:</span>              <span class="e">&quot;2:\n&quot;</span>
<a name="72" /><span class="False">      72:</span>              <a href="cpu.c_macros_ref.html#_X0FTTV9FWFRBQkxFXzA_"><span class="b">_ASM_EXTABLE</span></a><span class="f">(</span><span class="c">1b</span><span class="f">,</span> <span class="c">2b</span><span class="f">)</span>
<a name="73" /><span class="False">      73:</span>              <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;=m&quot;</span> <span class="f">(</span><span class="b">__force_order</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;0&quot;</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="74" /><span class="True">      74:</span> <span class="f">#</span><span class="n">else</span>
<a name="75" /><span class="True">      75:</span>     <span class="b">val</span> <span class="f">=</span> <span class="b">native_read_cr4</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="76" /><span class="True">      76:</span> <span class="f">#</span><span class="n">endif</span>
<a name="77" /><span class="True">      77:</span>     <span class="m">return</span> <span class="b">val</span><span class="f">;</span>
<a name="78" /><span class="True">      78:</span> <span class="f">}</span>
<a name="79" /><span class="True">      79:</span> 
<a name="80" /><span class="True">      80:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_write_cr4</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">)</span>
<a name="81" /><span class="True">      81:</span> <span class="f">{</span>
<a name="82" /><span class="True">      82:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mov %0,%%cr4&quot;</span><span class="f">:</span> <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span> <span class="f">(</span><span class="b">__force_order</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="83" /><span class="True">      83:</span> <span class="f">}</span>
<a name="84" /><span class="True">      84:</span> 
<a name="85" /><span class="True">      85:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="86" /><span class="True">      86:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">native_read_cr8</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="87" /><span class="True">      87:</span> <span class="f">{</span>
<a name="88" /><span class="True">      88:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">cr8</span><span class="f">;</span>
<a name="89" /><span class="True">      89:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;movq %%cr8,%0&quot;</span> <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">cr8</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="90" /><span class="True">      90:</span>     <span class="m">return</span> <span class="b">cr8</span><span class="f">;</span>
<a name="91" /><span class="True">      91:</span> <span class="f">}</span>
<a name="92" /><span class="True">      92:</span> 
<a name="93" /><span class="True">      93:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_write_cr8</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">)</span>
<a name="94" /><span class="True">      94:</span> <span class="f">{</span>
<a name="95" /><span class="True">      95:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;movq %0,%%cr8&quot;</span> <span class="f">::</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>
<a name="96" /><span class="True">      96:</span> <span class="f">}</span>
<a name="97" /><span class="True">      97:</span> <span class="f">#</span><span class="n">endif</span>
<a name="98" /><span class="True">      98:</span> 
<a name="99" /><span class="True">      99:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_wbinvd</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="100" /><span class="True">     100:</span> <span class="f">{</span>
<a name="101" /><span class="True">     101:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;wbinvd&quot;</span><span class="f">:</span> <span class="f">:</span> <span class="f">:</span><span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>
<a name="102" /><span class="True">     102:</span> <span class="f">}</span>
<a name="103" /><span class="True">     103:</span> 
<a name="104" /><span class="True">     104:</span> <span class="m">extern</span> <a href="cpu.c_macros_ref.html#_YXNtbGlua2FnZV8w"><span class="b">asmlinkage</span></a> <span class="m">void</span> <span class="b">native_load_gs_index</span><span class="f">(</span><span class="m">unsigned</span><span class="f">)</span><span class="f">;</span>
<a name="105" /><span class="True">     105:</span> 
<a name="106" /><span class="False">     106:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_PARAVIRT</span>
<a name="107" /><span class="False">     107:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">paravirt</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="108" /><span class="True">     108:</span> <span class="f">#</span><span class="n">else</span>
<a name="109" /><span class="True">     109:</span> 
<a name="110" /><span class="True">     110:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">read_cr0</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="111" /><span class="True">     111:</span> <span class="f">{</span>
<a name="112" /><span class="True">     112:</span>     <span class="m">return</span> <span class="b">native_read_cr0</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="113" /><span class="True">     113:</span> <span class="f">}</span>
<a name="114" /><span class="True">     114:</span> 
<a name="115" /><span class="True">     115:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">write_cr0</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">x</span><span class="f">)</span>
<a name="116" /><span class="True">     116:</span> <span class="f">{</span>
<a name="117" /><span class="True">     117:</span>     <span class="b">native_write_cr0</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">;</span>
<a name="118" /><span class="True">     118:</span> <span class="f">}</span>
<a name="119" /><span class="True">     119:</span> 
<a name="120" /><span class="True">     120:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">read_cr2</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="121" /><span class="True">     121:</span> <span class="f">{</span>
<a name="122" /><span class="True">     122:</span>     <span class="m">return</span> <span class="b">native_read_cr2</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="123" /><span class="True">     123:</span> <span class="f">}</span>
<a name="124" /><span class="True">     124:</span> 
<a name="125" /><span class="True">     125:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">write_cr2</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">x</span><span class="f">)</span>
<a name="126" /><span class="True">     126:</span> <span class="f">{</span>
<a name="127" /><span class="True">     127:</span>     <span class="b">native_write_cr2</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">;</span>
<a name="128" /><span class="True">     128:</span> <span class="f">}</span>
<a name="129" /><span class="True">     129:</span> 
<a name="130" /><span class="True">     130:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">read_cr3</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="131" /><span class="True">     131:</span> <span class="f">{</span>
<a name="132" /><span class="True">     132:</span>     <span class="m">return</span> <span class="b">native_read_cr3</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="133" /><span class="True">     133:</span> <span class="f">}</span>
<a name="134" /><span class="True">     134:</span> 
<a name="135" /><span class="True">     135:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">write_cr3</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">x</span><span class="f">)</span>
<a name="136" /><span class="True">     136:</span> <span class="f">{</span>
<a name="137" /><span class="True">     137:</span>     <span class="b">native_write_cr3</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">;</span>
<a name="138" /><span class="True">     138:</span> <span class="f">}</span>
<a name="139" /><span class="True">     139:</span> 
<a name="140" /><span class="True">     140:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">read_cr4</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="141" /><span class="True">     141:</span> <span class="f">{</span>
<a name="142" /><span class="True">     142:</span>     <span class="m">return</span> <span class="b">native_read_cr4</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="143" /><span class="True">     143:</span> <span class="f">}</span>
<a name="144" /><span class="True">     144:</span> 
<a name="145" /><span class="True">     145:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">read_cr4_safe</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="146" /><span class="True">     146:</span> <span class="f">{</span>
<a name="147" /><span class="True">     147:</span>     <span class="m">return</span> <span class="b">native_read_cr4_safe</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="148" /><span class="True">     148:</span> <span class="f">}</span>
<a name="149" /><span class="True">     149:</span> 
<a name="150" /><span class="True">     150:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">write_cr4</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">x</span><span class="f">)</span>
<a name="151" /><span class="True">     151:</span> <span class="f">{</span>
<a name="152" /><span class="True">     152:</span>     <span class="b">native_write_cr4</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">;</span>
<a name="153" /><span class="True">     153:</span> <span class="f">}</span>
<a name="154" /><span class="True">     154:</span> 
<a name="155" /><span class="True">     155:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">wbinvd</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="156" /><span class="True">     156:</span> <span class="f">{</span>
<a name="157" /><span class="True">     157:</span>     <span class="b">native_wbinvd</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="158" /><span class="True">     158:</span> <span class="f">}</span>
<a name="159" /><span class="True">     159:</span> 
<a name="160" /><span class="True">     160:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="161" /><span class="True">     161:</span> 
<a name="162" /><span class="True">     162:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">read_cr8</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="163" /><span class="True">     163:</span> <span class="f">{</span>
<a name="164" /><span class="True">     164:</span>     <span class="m">return</span> <span class="b">native_read_cr8</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="165" /><span class="True">     165:</span> <span class="f">}</span>
<a name="166" /><span class="True">     166:</span> 
<a name="167" /><span class="True">     167:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">write_cr8</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">x</span><span class="f">)</span>
<a name="168" /><span class="True">     168:</span> <span class="f">{</span>
<a name="169" /><span class="True">     169:</span>     <span class="b">native_write_cr8</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">;</span>
<a name="170" /><span class="True">     170:</span> <span class="f">}</span>
<a name="171" /><span class="True">     171:</span> 
<a name="172" /><span class="True">     172:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">load_gs_index</span><span class="f">(</span><span class="m">unsigned</span> <span class="b">selector</span><span class="f">)</span>
<a name="173" /><span class="True">     173:</span> <span class="f">{</span>
<a name="174" /><span class="True">     174:</span>     <span class="b">native_load_gs_index</span><span class="f">(</span><span class="b">selector</span><span class="f">)</span><span class="f">;</span>
<a name="175" /><span class="True">     175:</span> <span class="f">}</span>
<a name="176" /><span class="True">     176:</span> 
<a name="177" /><span class="True">     177:</span> <span class="f">#</span><span class="n">endif</span>
<a name="178" /><span class="True">     178:</span> 
<a name="179" /><span class="True">     179:</span> <span class="k">/* Clear the &apos;TS&apos; bit */</span>
<a name="180" /><span class="True">     180:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">clts</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="181" /><span class="True">     181:</span> <span class="f">{</span>
<a name="182" /><span class="True">     182:</span>     <span class="b">native_clts</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="183" /><span class="True">     183:</span> <span class="f">}</span>
<a name="184" /><span class="True">     184:</span> 
<a name="185" /><span class="True">     185:</span> <span class="f">#</span><span class="n">endif</span><span class="k">/* CONFIG_PARAVIRT */</span>
<a name="186" /><span class="True">     186:</span> 
<a name="187" /><span class="True">     187:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c3R0c18w"><span class="b">stts</span></a><span class="f">(</span><span class="f">)</span> <span class="b">write_cr0</span><span class="f">(</span><span class="b">read_cr0</span><span class="f">(</span><span class="f">)</span> <span class="f">|</span> <a href="cpu.c_macros_noref.html#_WDg2X0NSMF9UU18w"><span class="b">X86_CR0_TS</span></a><span class="f">)</span>
<a name="188" /><span class="True">     188:</span> 
<a name="189" /><span class="True">     189:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">clflush</span><span class="f">(</span><span class="m">volatile</span> <span class="m">void</span> <span class="f">*</span><span class="b">__p</span><span class="f">)</span>
<a name="190" /><span class="True">     190:</span> <span class="f">{</span>
<a name="191" /><span class="True">     191:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;clflush %0&quot;</span> <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="m">volatile</span> <span class="m">char</span> <a href="cpu.c_macros_ref.html#_X19mb3JjZV8w"><span class="b">__force</span></a> <span class="f">*</span><span class="f">)</span><span class="b">__p</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="192" /><span class="True">     192:</span> <span class="f">}</span>
<a name="193" /><span class="True">     193:</span> 
<a name="194" /><span class="True">     194:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bm9wXzA_"><span class="b">nop</span></a><span class="f">(</span><span class="f">)</span> <span class="m">asm</span> <span class="m">volatile</span> <span class="f">(</span><span class="e">&quot;nop&quot;</span><span class="f">)</span>
<a name="195" /><span class="True">     195:</span> 
<a name="196" /><span class="True">     196:</span> 
<a name="197" /><span class="True">     197:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __KERNEL__ */</span>
<a name="198" /><span class="True">     198:</span> 
<a name="199" /><span class="True">     199:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_SPECIAL_INSNS_H */</span>
<a name="200" /><span class="True">     200:</span> </pre>
  </body>
</html>
